package net.borlis.sample.facade.common;

import net.borlis.dictionaries.product.LifecycleStateDictionary;
import net.borlis.sample.service.repositories.configuration.parent.api.*;
import net.borlis.sample.service.repositories.configuration.producer.api.*;
import net.borlis.sample.service.repositories.customer.DynamixAccountRepository;
import net.borlis.sample.service.repositories.customer.DynamixCustomerRepository;
import net.borlis.sample.service.repositories.customer.VitoXDynamixAccountRepository;
import net.borlis.sample.service.repositories.customer.VitoXDynamixCustomerRepository;
import net.borlis.sample.service.repositories.general.*;
import net.borlis.sample.service.repositories.lifecycle.*;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;

/**
 * @author alex@borlis.net
 */
@RequestScoped
public class ServiceRepoProvider {

    @Inject
    private DynamixLocaleRepository dynamixLocaleRepository;

    @Inject
    private CurrencyRepository currencyRepository;
    @Inject
    private CurrencyDetailRepository currencyDetailRepository;

    @Inject
    private CountryRepository countryRepository;
    @Inject
    private CountryDetailRepository countryDetailRepository;

    @Inject
    private IVitoRepositoryProducer vitoRepositoryProducer;
    @Inject
    private IAttachedMainOrganisationRepositoryProducer attachedMainOrganisationRepositoryProducer;

    @Inject
    private DynamixProviderSubtypeRepository subtypeRepository;
    @Inject
    private DynamixProviderTypeRepository typeRepository;
    @Inject
    private CombinedDynamixProviderTypeRepository combinedRepository;

    @Inject
    private ProviderRepository providerRepository;
    @Inject
    private DynamixProviderRepository dynamixProviderRepository;
    @Inject
    private DynamixProviderDetailRepository dynamixProviderDetailRepository;
    @Inject
    private TypedDynamixProviderRepository typedDynamixProviderRepository;
    @Inject
    private IVitoConfigurationRepositoryProducer vitoConfigurationRepositoryProducer;
    @Inject
    private IVitoAddressRepositoryProducer vitoAddressRepositoryProducer;

    @Inject
    private IManualBookingStrategyRepositoryProducer manualBookingStrategyRepositoryProducer;

    @Inject
    private ITravelPeriodRepositoryProducer travelPeriodRepositoryProducer;
    @Inject
    private TravelDurationRepository travelDurationRepository;
    @Inject
    private IVitoProviderConfigurationRepositoryProducer vitoProviderConfigurationRepositoryProducer;
    @Inject
    private IVitoProviderConfigXTravelDurationRepositoryProducer vitoProviderConfigXTravelDurationRepositoryProducer;
    @Inject
    private IVitoProviderRepositoryProducer vitoProviderRepositoryProducer;
    @Inject
    private IVitoProviderXVitoBookingInfoRepositoryProducer vitoProviderXVitoBookingInfoRepositoryProducer;

    @Inject
    private DynamixAccountRepository dynamixAccountRepository;
    @Inject
    private DynamixCustomerRepository dynamixCustomerRepository;
    @Inject
    private VitoXDynamixAccountRepository vitoXDynamixAccountRepository;
    @Inject
    private VitoXDynamixCustomerRepository vitoXDynamixCustomerRepository;

    @Inject
    private PaymentSystemRepository paymentSystemRepository;
    @Inject
    private IVitoPaymentSystemRepositoryProducer vitoPaymentSystemRepositoryProducer;

    @Inject
    private BookingStrategyTypeRepository bookingStrategyTypeRepository;
    @Inject
    private BookingStrategyDecisionRepository bookingStrategyDecisionRepository;
    @Inject
    private BookingStrategyRepository bookingStrategyRepository;
    @Inject
    private CombinedBookingStrategyRepository combinedBookingStrategyRepository;

    @Inject
    private IBankDetailRepositoryProducer bankDetailRepositoryProducer;

    @Inject
    private LifecycleRepository lifecycleRepository;
    @Inject
    private LifecycleActionRepository lifecycleActionRepository;
    @Inject
    private LifecycleStateRepository lifecycleStateRepository;
    @Inject
    private LifecycleStatusRepository lifecycleStatusRepository;
    @Inject
    private LifecycleStateStatusRepository lifecycleStateStatusRepository;
    @Inject
    private LifecycleTransactionRepository lifecycleTransactionRepository;
    @Inject
    private LifecycleOperationRepository lifecycleOperationRepository;

    @Inject
    private ICreditCardDetailRepositoryProducer creditCardDetailRepositoryProducer;

    @Inject
    private IVitoProviderDefaultSettingsRepositoryProducer defaultSettingsRepositoryProducer;
    @Inject
    private IVitoProviderDefaultSettingsXTravelDurationRepositoryProducer vitoProviderDefaultSettingsXTravelDurationRepositoryProducer;

    public IVitoProviderDefaultSettingsRepository getVitoProviderDefaultSettingsRepository(LifecycleStateDictionary state) {
        return defaultSettingsRepositoryProducer.produce(state);
    }

    public IVitoProviderDefaultSettingsXTravelDurationRepository getVitoProviderDefaultSettingsXTravelDurationRepository(
            LifecycleStateDictionary state
    ) {
        return vitoProviderDefaultSettingsXTravelDurationRepositoryProducer.produce(state);
    }

    public DynamixLocaleRepository getDynamixLocaleRepository() {
        return dynamixLocaleRepository;
    }

    public CurrencyRepository getCurrencyRepository() {
        return currencyRepository;
    }

    public CurrencyDetailRepository getCurrencyDetailRepository() {
        return currencyDetailRepository;
    }

    public CountryRepository getCountryRepository() {
        return countryRepository;
    }

    public CountryDetailRepository getCountryDetailRepository() {
        return countryDetailRepository;
    }

    public IVitoRepository getVitoRepository(LifecycleStateDictionary state) {
        return vitoRepositoryProducer.produce(state);
    }

    public IAttachedMainOrganisationRepository getMainOrganisationRepository(LifecycleStateDictionary state) {
        return attachedMainOrganisationRepositoryProducer.produce(state);
    }

    public DynamixProviderSubtypeRepository getSubtypeRepository() {
        return subtypeRepository;
    }

    public DynamixProviderTypeRepository getTypeRepository() {
        return typeRepository;
    }

    public CombinedDynamixProviderTypeRepository getCombinedRepository() {
        return combinedRepository;
    }

    public ProviderRepository getProviderRepository() {
        return providerRepository;
    }

    public DynamixProviderRepository getDynamixProviderRepository() {
        return dynamixProviderRepository;
    }

    public DynamixProviderDetailRepository getDynamixProviderDetailRepository() {
        return dynamixProviderDetailRepository;
    }

    public TypedDynamixProviderRepository getTypedDynamixProviderRepository() {
        return typedDynamixProviderRepository;
    }

    public IVitoConfigurationRepository getVitoConfigurationRepository(LifecycleStateDictionary state) {
        return vitoConfigurationRepositoryProducer.produce(state);
    }

    public IVitoAddressRepository getVitoAddressRepository(LifecycleStateDictionary state) {
        return vitoAddressRepositoryProducer.produce(state);
    }

    public ITravelPeriodRepository getTravelPeriodRepository(LifecycleStateDictionary state) {
        return travelPeriodRepositoryProducer.produce(state);
    }

    public TravelDurationRepository getTravelDurationRepository() {
        return travelDurationRepository;
    }

    public IVitoProviderConfigurationRepository getVitoProviderConfigurationRepository(LifecycleStateDictionary state) {
        return vitoProviderConfigurationRepositoryProducer.produce(state);
    }

    public IVitoProviderConfigXTravelDurationRepository getVitoProviderConfigXTravelDurationRepository(LifecycleStateDictionary state) {
        return vitoProviderConfigXTravelDurationRepositoryProducer.produce(state);
    }

    public IVitoProviderRepository getVitoProviderRepository(LifecycleStateDictionary state) {
        return vitoProviderRepositoryProducer.produce(state);
    }

    public IVitoProviderXVitoBookingInfoRepository getVitoProviderXVitoBookingInfoRepository(LifecycleStateDictionary state) {
        return vitoProviderXVitoBookingInfoRepositoryProducer.produce(state);
    }

    public DynamixAccountRepository getDynamixAccountRepository() {
        return dynamixAccountRepository;
    }

    public DynamixCustomerRepository getDynamixCustomerRepository() {
        return dynamixCustomerRepository;
    }

    public VitoXDynamixAccountRepository getVitoXDynamixAccountRepository() {
        return vitoXDynamixAccountRepository;
    }

    public VitoXDynamixCustomerRepository getVitoXDynamixCustomerRepository() {
        return vitoXDynamixCustomerRepository;
    }

    public PaymentSystemRepository getPaymentSystemRepository() {
        return paymentSystemRepository;
    }

    public IVitoPaymentSystemRepository getVitoPaymentSystemRepository(LifecycleStateDictionary state) {
        return vitoPaymentSystemRepositoryProducer.produce(state);
    }

    public BookingStrategyTypeRepository getBookingStrategyTypeRepository() {
        return bookingStrategyTypeRepository;
    }

    public BookingStrategyDecisionRepository getBookingStrategyDecisionRepository() {
        return bookingStrategyDecisionRepository;
    }

    public BookingStrategyRepository getBookingStrategyRepository() {
        return bookingStrategyRepository;
    }

    public CombinedBookingStrategyRepository getCombinedBookingStrategyRepository() {
        return combinedBookingStrategyRepository;
    }

    public LifecycleRepository getLifecycleRepository() {
        return lifecycleRepository;
    }

    public LifecycleActionRepository getLifecycleActionRepository() {
        return lifecycleActionRepository;
    }

    public LifecycleStateRepository getLifecycleStateRepository() {
        return lifecycleStateRepository;
    }

    public LifecycleStatusRepository getLifecycleStatusRepository() {
        return lifecycleStatusRepository;
    }

    public LifecycleStateStatusRepository getLifecycleStateStatusRepository() {
        return lifecycleStateStatusRepository;
    }

    public LifecycleTransactionRepository getLifecycleTransactionRepository() {
        return lifecycleTransactionRepository;
    }

    public LifecycleOperationRepository getLifecycleOperationRepository() {
        return lifecycleOperationRepository;
    }

    public IBankDetailRepository getBankDetailRepository(LifecycleStateDictionary state) {
        return  bankDetailRepositoryProducer.produce(state);
    }

    public ICreditCardDetailRepository getCreditCardDetailRepository(LifecycleStateDictionary state) {
        return  creditCardDetailRepositoryProducer.produce(state);
    }

    public IManualBookingStrategyRepository getManualBookingStrategyRepository(LifecycleStateDictionary state){
        return manualBookingStrategyRepositoryProducer.produce(state);
    }


}
